const fp = require("lodash/fp");
// horsepower 马力, dollar_value 价格, in_stock 库存
const cars = [
    {
        name: "Ferrair FF",
        horsepower: 660,
        dollar_value: 700000,
        in_stock: true,
    },
    {
        name: "Spyker C12 Zagato",
        horsepower: 650,
        dollar_value: 648000,
        in_stock: false,
    },
    {
        name: "Jafuar XKR-S",
        horsepower: 550,
        dollar_value: 132000,
        in_stock: false,
    },
    { name: "Audi R8", horsepower: 525, dollar_value: 114200, in_stock: false },
    {
        name: "Aston Martin One-77",
        horsepower: 750,
        dollar_value: 1850000,
        in_stock: true,
    },
    {
        name: "Pagani Huayra",
        horsepower: 700,
        dollar_value: 1300000,
        in_stock: false,
    },
];

// 1.使用函数组合fp.flowRight() 重新实现下面这个函数
let isLastInStock = function (cars) {
    // 获取最后一条数据
    let last_car = fp.last(cars);
    // 获取最后一条数据的 in_stock属性值
    return fp.prop("in_stock", last_car);
};
console.log("lastInStock", isLastInStock(cars));
// 实现:
let lastInStock = fp.flowRight(fp.prop("in_stock"), fp.last);
console.log("lastInStock", lastInStock(cars));

// 2.使用fp.flowRight(),fp.prop(),和fp.first()获取第一个car的name
// 实现:
let firstCarName = fp.flowRight(fp.prop("name"), fp.first);
console.log("firstCarName", firstCarName(cars));

// 3.使用帮助函数_average重构averageDollarValue,使用函数组合的方式实现
let _average = function (xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length;
};
let averageDollarValue = function (cars) {
    let dollar_values = fp.map(function (car) {
        return car.dollar_value;
    }, cars);
    return _average(dollar_values);
};
console.log("averageDollarValue", averageDollarValue(cars));

// 实现:

let averageDollarValue2 = fp.flowRight(
    _average,
    fp.map((x) => x.dollar_value)
);
console.log("averageDollarValue", averageDollarValue2(cars));

// 4.使用flowRight 写一个sanitizeNames()函数,返回一个下划线连接小写的字符串,把数组中的name转换成为这种形式: 例如: sanitizeNames(["Hello World"]) => ['hello_world"]
let _underscore = fp.replace(/\W+/g, "_");

let sanitizeNames = fp.flowRight(fp.map((x) => _underscore(x)));
console.log(sanitizeNames(["Hello World"]));
